home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
ask
/
source_
/
devlk.s
< prev
next >
Wrap
Text File
|
1997-05-01
|
2KB
|
75 lines
*--------------------------------------------------------------------
* デバイスドライバー用関数
*--------------------------------------------------------------------
.include iocscall.mac
.text
.even
.xref GetNulPoint
*--------------------------------------------------------------------
.xdef SetDevLink
SetDevLink:
* デバイスドライバーのリンクに入り込む
* a0.l <- 組み込むデバイスヘッダー
movem.l d0/a0-a2,-(sp)
lea SetDevLinkMain(pc),a2
bra.b @f
*
.xdef ResetDevLink
ResetDevLink:
* デバイスドライバーのリンクを解除する
* a0.l <- 解除するデバイスヘッダー
movem.l d0/a0-a2,-(sp)
lea ResetDevLinkMain(pc),a2
@@:
clr.l a1
IOCS _B_SUPER * super visor mode
move.l d0,-(sp)
*
bsr GetNulPoint * -> a1(NUL)
jsr (a2) * メイン
*
move.l (sp)+,d0
bmi @f * 元からsuper visorであった
move.l d0,a1
IOCS _B_SUPER * user mode
@@: movem.l (sp)+,d0/a0-a2
rts
*--------------------------------------------------------------------
* NULデバイスがデバイスリンクの一番先頭であり、必ず次のデバイスが
* リンクしていると仮定しているルーチンである。
*--------------------------------------------------------------------
SetDevLinkMain:
* a0 <- 組み込むデバイスヘッダー
* a1 <- NUL
* 最後を調べる
@@: move.l (a1),a1 * 次へ(NULの次は必ずあるので最初はいきなり飛ばす)
cmp.l #-1,(a1) * 最後?
bne @b * No
move.l a0,(a1) * リンク
rts
*--------------------------------------------------------------------
ResetDevLinkMain:
* a0 <- 解除するデバイスヘッダー
* a1 <- NUL
@@: move.l (a1),a1 * 次へ
cmp.l #-1,(a1) * 最後?
beq @f * Yes : なかった(本当はおかしいが手抜きでエラーなし)
cmp.l (a1),a0 * 次は指定デバイス?
bne @b * Yes
* リンクを外す
* 解除するデバイスヘッダーのnextを前のデバイスのnextに書き込む
move.l (a0),(a1)
@@:
rts
*--------------------------------------------------------------------
.end